#include <iostream>
#include <cstring>
#include <cerrno>
#include <cassert>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
using namespace std;

int main()
{
    //1.创建管道文件mkfifo
    umask(0); //这个设置并不影响系统的默认配置，只会影响当前进程
    int n = mkfifo("./fifo", 0666);
    if (n == -1) //失败返回-1，打印错误码并且退出1
    {
        cout << errno << " : " << strerror(errno) << endl;
        return 1;
    }
    //2.让进程A开启管道文件
    int wfd = open("fifo", O_WRONLY);
    if (wfd == -1)//失败返回-1，打印错误码并且退出2
    {
        cout << errno << " : " << strerror(errno) << endl;
        return 2;
    }
    //3.向管道中写入"i am process A"
    while (true)
    {
        char buffer[1024] = "i am process A";
        ssize_t m = write(wfd, buffer, strlen(buffer));
        assert(m > 0);
        (void)m;
        sleep(1);
    }
    close(wfd);
    unlink("fifo");//去掉管道文件的链接，也就是删除fifo文件

    return 0;
}
